package com.fanshuai2.niuke.strings;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 在命令行输入如下命令：
 *
 * xcopy /s c:\\ d:\\e，
 *
 * 各个参数如下：
 *
 * 参数1：命令字xcopy
 *
 * 参数2：字符串/s
 *
 * 参数3：字符串c:\\
 *
 * 参数4: 字符串d:\\e
 *
 * 请编写一个参数解析程序，实现将命令行各个参数解析出来。
 *
 *
 * 解析规则：
 *
 * 1.参数分隔符为空格
 * 2.对于用""包含起来的参数，如果中间有空格，不能解析为多个参数。比如在命令行输入xcopy /s "C:\\program files" "d:\"时，参数仍然是4个，第3个参数应该是字符串C:\\program files，而不是C:\\program，注意输出参数时，需要将""去掉，引号不存在嵌套情况。
 * 3.参数不定长
 *
 * 4.输入由用例保证，不会出现不符合要求的输入
 */
public class ParseCmd {
    static List<String> getCmd(String text) {
        text = text.trim();
        char[] arr = text.toCharArray();

        List<String> cmds = new ArrayList<>();
        boolean quoteFlag = false;

        int k = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == ' ') {
                if (quoteFlag) {
                    continue;
                }
                String cmd = text.substring(k, i);
                if (cmd.startsWith("\"")) {
                    cmd = cmd.substring(1, cmd.length() - 1);
                }
                cmds.add(cmd);

                k = i + 1;
            } else if (arr[i] == '\"') {
                quoteFlag = !quoteFlag;
            }
        }

        String cmd = text.substring(k, arr.length);
        if (cmd.startsWith("\"")) {
            cmd = cmd.substring(1, cmd.length() - 1);
        }
        cmds.add(cmd);
        return cmds;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        while (in.hasNextLine()) {
            String text = in.nextLine();
            List<String> cmds = getCmd(text);

            System.out.println(cmds.size());
            for (String cmd : cmds) {
                System.out.println(cmd);
            }
        }
    }
}
